package com.sg.dto.biz.app.req;

import com.sg.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.io.Serializable;

/**
 * @desc ImplementAddTargetCoreInfoComReqDto
 * @使用场景
 */
@Data
public class ImplementAddTargetCoreInfoComReqDto
        extends BaseDto
        implements Serializable {

    /**
     * 指标名称
     */
    @NotNull(message = "指标名称不能为空")
    @ApiModelProperty("指标名称")
    private String objectiveName;

    /**
     * 指标简称
     */
    @NotNull(message = "指标简称不能为空")
    @ApiModelProperty("指标简称")
    private String objectiveShortName;

    /**
     * 指标标识
     */
    @NotNull(message = "指标标识不能为空")
    @ApiModelProperty("指标标识")
    private String objectiveCode;

    /**
     * 层级
     */
    @NotNull(message = "层级不能为空")
    @ApiModelProperty("层级")
    private Long levelNumber;

    /**
     * 排序
     */
    @NotNull(message = "排序不能为空")
    @ApiModelProperty("排序")
    private Long orderNumber;

    /**
     * 部门排序
     */
    @ApiModelProperty("部门排序")
    private Long dutyBodyOrderNum;

    /**
     * 个人排序
     */
    @ApiModelProperty("个人排序")
    private Long personalOrderNumber;

    /**
     * 权重排序
     */
    @ApiModelProperty("权重排序")
    private Long weightOrderNumber;

    /**
     * 周期模式类型编码 FATHER_SON_CYCLE:父子周期 SINGLE_CYCLE:单周期 IRREGULAR_CYCLE:不规则周期
     */
    @ApiModelProperty("周期模式类型编码")
    private String periodicModeTypeCode;

    /**
     * 指标汇报对象设置项编码 PRIMARY_TASK:一级建设任务 SECONDARY_TASK:二级建设任务 PRIMARY_OBSERVATION_POINT:二级以下建设任务或一级观测点 SECONDARY_OBSERVATION_POINT:二级观测点 OTHER_OBSERVATION_POINT:二级以下观测点
     */
    @NotNull(message = "指标汇报对象设置项编码不能为空")
    @ApiModelProperty("指标汇报对象设置项编码")
    private String reportObjectSetCode;

    /**
     * 责任主体类型 PERSONAL:个人 DEPT:部门
     */
    @NotNull(message = "责任主体类型不能为空")
    @ApiModelProperty("责任主体类型")
    private String respBodyType;

    /**
     * 目标类型 PERSON_LIABLE:团队目标 INITIATOR:个人目标 PARTICIPANTS:111111协同目标
     */
    @NotNull(message = "目标类型不能为空")
    @ApiModelProperty("目标类型")
    private String targetType;

    /**
     * 是否用于一级部门 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否用于一级部门不能为空")
    @ApiModelProperty("是否用于一级部门")
    private String isUseFirstDept;

    /**
     * 是否末级指标 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否末级指标不能为空")
    @ApiModelProperty("是否末级指标")
    private String isLastObjective;

    /**
     * 归属父级指标ID
     */
    @ApiModelProperty("归属父级指标ID")
    private String parentObjectiveId;

    /**
     * 归属父级目标分类ID
     */
    @ApiModelProperty("归属父级目标分类ID")
    private String parentTargetCategoryId;

    /**
     * 冗余一级指标ID
     */
    @ApiModelProperty("冗余一级指标ID")
    private String rootObjectiveId;

    /**
     * 冗余一级目标分类ID
     */
    @NotNull(message = "冗余一级目标分类ID不能为空")
    @ApiModelProperty("冗余一级目标分类ID")
    private String rootTargetCategoryId;

    /**
     * 关联末级目标分类ID
     */
    @NotNull(message = "关联末级目标分类ID不能为空")
    @ApiModelProperty("关联末级目标分类ID")
    private String correlationLastTargetCatId;

    /**
     * 冗余指标模板ID
     */
    @NotNull(message = "冗余指标模板ID不能为空")
    @ApiModelProperty("冗余指标模板ID")
    private String objectiveTemplateId;

    /**
     * 冗余指标模板类型 QUALITATIVE:定性 RATION:定量
     */
    @NotNull(message = "冗余指标模板类型不能为空")
    @ApiModelProperty("冗余指标模板类型")
    private String objectiveType;

    /**
     * 冗余指标业务类型 NUMBER_GROWTH:数量增长型 NUMBER_DECLINE:数量降幅型 PERCENTAGE_GROWTH:百分比增长型 PERCENTAGE_DECLINE:百分比降幅型 PROGRESS:进度型 RATIO_GROWTH:比率增长型 RATIO_DECLINE:比率降幅型 SUBJECTIVE_QUALITATIVE:主观定性
     */
    @NotNull(message = "冗余指标业务类型不能为空")
    @ApiModelProperty("冗余指标业务类型")
    private String targetValueType;

    /**
     * 冗余是否有目标值 TRUE:是 FALSE:否
     */
    @ApiModelProperty("冗余是否有目标值")
    private String isUseTargetValue;

    /**
     * 冗余是否左侧比例型 TRUE:是 FALSE:否
     */
    @ApiModelProperty("冗余是否左侧比例型")
    private String isLeft;

    /**
     * 冗余单位
     */
    @ApiModelProperty("冗余单位")
    private String unit;

    /**
     * 冗余数字单位
     */
    @ApiModelProperty("冗余数字单位")
    private Double digitalUnit;

    /**
     * 计算数据来源 MANUAL_FILLING:人工填报 SYSTEM_DOCKING:系统对接
     */
    @NotNull(message = "计算数据来源不能为空")
    @ApiModelProperty("计算数据来源")
    private String calculateDataSource;

    /**
     * 系统对接计算点 CALCULATE:计算实际值 SCORE_AFTER_CALCULATE:计算实际值得分
     */
    @ApiModelProperty("系统对接计算点")
    private String systemDocking;

    /**
     * 是否开启主观评分 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否开启主观评分不能为空")
    @ApiModelProperty("是否开启主观评分")
    private String isSubjectiveScoring;

    /**
     * 是否开启量化客观评分 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否开启量化客观评分不能为空")
    @ApiModelProperty("是否开启量化客观评分")
    private String isObjectiveQuantization;

    /**
     * 是否开启预算 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否开启预算不能为空")
    @ApiModelProperty("是否开启预算")
    private String isUseBudget;

    /**
     * 是否开启预算末级个人汇报 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否开启预算末级个人汇报不能为空")
    @ApiModelProperty("是否开启预算末级个人汇报")
    private String isOpenBudgetManualReport;

    /**
     * 是否开启自定义汇报 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否开启自定义汇报不能为空")
    @ApiModelProperty("是否开启自定义汇报")
    private String isOpenCustomReport;

    /**
     * 是否已下发指标达成度数据 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否已下发指标达成度数据")
    private String isAcceptObjectiveReachData;

    /**
     * 分工末级责任主体设置 FINAL_DEPARTMENT:末级部门 FINAL_PERSON:末级个人
     */
    @ApiModelProperty("分工末级责任主体设置")
    private String lasttLiableSubject;

    /**
     * 与父级责任主体是否相同 TRUE:是 FALSE:否
     */
    @NotNull(message = "与父级责任主体是否相同不能为空")
    @ApiModelProperty("与父级责任主体是否相同")
    private String andParentBodyIsIdentical;

    /**
     * 冗余目标ID
     */
    @NotNull(message = "冗余目标ID不能为空")
    @ApiModelProperty("冗余目标ID")
    private String targetId;

    /**
     * 冗余评价模板ID
     */
    @NotNull(message = "冗余评价模板ID不能为空")
    @ApiModelProperty("冗余评价模板ID")
    private String evaluationTemplateId;

    /**
     * 批次标识
     */
    @NotNull(message = "批次标识不能为空")
    @ApiModelProperty("批次标识")
    private String batchCode;

}
